package com.example.networktest

import kotlinx.coroutines.*
import kotlin.coroutines.resume
import kotlin.coroutines.resumeWithException
import kotlin.coroutines.suspendCoroutine

fun main() {
//    GlobalScope.launch {
//        println("codes run in coroutine scope")
//        delay(1500)
//        println("codes run in coroutine scope")
//    }
//    Thread.sleep(1000)

//    runBlocking {
//        println("codes run in coroutine scope")
//        delay(1500)
//        println("codes run in coroutine scope")
//    }
//    Thread.sleep(1000)

//    runBlocking {
//        launch {
//            println("launch1")
//            delay(1000)
//            println("launch1 finished")
//        }
//        launch {
//            println("launch2")
//            delay (1000)
//            println("launch2 finished")
//        }
//    }
//
//    val startTime = System.currentTimeMillis()
//    runBlocking {
//        repeat(100000){
//            launch {
//                println(".")
//            }
//        }
//    }
//    val endTime = System.currentTimeMillis()
//    println(endTime - startTime)

//    runBlocking {
//        coroutineScope {
//            launch {
//                for (i in 1..10) {
//                    println(i)
//                    delay(1000)
//                }
//            }
//        }
//        println("coroutineScope finished")
//    }
//    println("runBlocking finished")


//    val job = Job()
//    val scope = CoroutineScope(job)
//    scope.launch {
//        //
//    }
//    job.cancel()

//    runBlocking {
//        val result1 = async {
//            5 + 5
//        }
//
//        val result2 = async {
//            5 + 5
//        }
//        println(result1.await() + result2.await())
//    }

//    runBlocking {
//        val result = withContext(Dispatchers.Default) {
//            5 + 5
//        }
//        println(result)
//    }


}

suspend fun printDot() = coroutineScope {
    launch {
        println(".")
        delay(1000)
    }
}

suspend fun request(address: String): String {
    return suspendCoroutine {  continuation ->
        HttpUtil.sendHttpRequest(address, object : HttpCallbackListener {
            override fun onFinish(response: String) {
                continuation.resume(response)
            }
            override fun onError(e: Exception) {
                continuation.resumeWithException(e)
            }
        })
    }
}